package com.exercise.DesignPattern.CreationalPatterns.SingletonPattern;

/**
 * 单例模式
 *
 * 核心思想：确保一个类只有一个实例，并提供一个全局访问点。
 * 实现方式：通过私有化构造函数和提供一个静态方法来获取实例。
 * 应用场景：数据库连接池、配置管理类、日志记录器。
 *
 * 优点：
 * 控制实例数量：保证只有一个实例。
 * 提供全局访问点：方便在全局范围内访问该实例。
 */
public class Singleton {
    //类加载时不创造实例  volatile可见性、有序性 再这里是防止指令重排
    private static volatile Singleton instance;

    //私有构造器
    private Singleton(){};

    //全局访问构造器，使用双重判定锁来保证线程安全
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized(Singleton.class) {
                if (instance == null) {

                    return new Singleton();
                }
            }
        }
        return instance;
    }
}
